package com.study.spark.scala.chapter08

object Scala02_Match {
  def main(args: Array[String]): Unit = {
    // TODO　模糊查询 - 匹配规则
    // 匹配常量
    def describe(x: Any) = x match {
      case 5 => "Int five"
      case "hello" => "String hello"
      case true => "Boolean true"
      case '+' => "Char +"
    }

    println(describe("hello"))//String hello

    // 匹配类型
    def describe1(x: Any) = x match {
      case i: Int => i + 2
      case s: String => "String hello"
      case m: List[String] => "List"
      case c: Array[Int] => "Array[Int]"
      case someThing => "something else " + someThing
    }

    // 类型前增加变量名称，这个变量就是将数据转换成指定类型的变量
    println(describe1(2))//4

    // 如果想要使用下划线代表数据，可以给下划线起别名来使用，泛型中下划线表示任意类型
    println(describe1(Set(1)))//something else Set(1)

    // scala中类型匹配时，不考虑泛型
    println(describe1(List(1,2)))//List

    // Array[Int]这里Int不是真正的泛型，而是看成一个整体作为一个类型
    println(describe1(Array("123")))//something else [Ljava.lang.String;@3ac3fd8b
  }
}
